#============================================
#知识点:
#一个Python文件有两种用途，一种被当主程序/脚本执行，另一种被当模块导入
#所以python提供了一个方法:
# if __name__ == '__main__':
    #foo.py被当做脚本执行时运行的代码
#else:
    #foo.py被当做模块导入时运行的代码
#在程序前加上这个，如果你在本文件执行代码，就是运行代码
#被其他文件导入当模块时，就会被当作模块

#============================================
#我们在编写py文件时，需要时刻提醒自己，该文件既是给自己用的，
# 也有可能会被其他人使用，因而代码的可读性与易维护性显得十分重要，
# 为此我们在编写一个模块时最好按照统一的规范去编写，如下

#"The module is used to..." #模块的文档描述
# import sys #导入模块

# x=1 #定义全局变量,如果非必须,则最好使用局部变量,这样可以提高代码的易维护性,并且可以节省内存提高性能

# class Foo: #定义类,并写好类的注释
#     'Class Foo is used to...'
#     pass

# def test(): #定义函数,并写好函数的注释
#     'Function test is used to…'
#     pass

# if __name__ == '__main__': #主程序
#     test() #在被当做脚本执行时,执行此处的代码

#============================================
#from qwq import *代表导入所有库
#from qwq import a,b,c同时导入三个库a,b,c
#每个函数默认都有一个__all__为一个列表里面时函数名称，删除，其他文件就导入不到该模块
#============================================
#使用from时要注意，不要产生循环导入，不然会报错
#假如有俩个模块，用第三个模块导入第一个模块，第一个模块里面又导入第二个模块，运行第一个模块先执行导入到第二个模块，而自己下面的的代码没执行，
#然后直接到第二个模块，第二个模块又先执行导入第一个模块的程序发现第一个模块名称空间已经创建，就直接问他要对于的函数，因为第一个模块的函数没执行，
# 所以就调取不到，发生错误。
#这种情况最好把俩个模块放到一个模块中，就可以解决。
#============================================
#无论是import还是from. . . import在导入模块时都涉及到查找问题
#优先级:
# 1、内存(内置模块)
# 2、按照sys . path中存放的文件的顺序依次查找要导入的模块
#import sys
#sys.modules  查看以加载到内存的模块
# print(sys.path)
#sys.path.append("地址")找一个模块，就把这个模块的地址添加到环境变量中
#============================================
#def register(name:str,age;int,hobbbies:tuple)->int:
#冒号后面只是提示时什么类型，不是硬性要求，->代表提示返回值为int类型
#============================================
# 1、包就是一个包含有__init__py文件的文件夹
# 2、为何要有包
# 包的本质是模块的模块的一种形式，包是用来被当做模块导入
# 产生一个名称空间
#2、运行包下的__init__.py文件。将运行过程中产生的名字都丢到1的名称空间中
#3、当前执行文件的名称空间中拿到一个名字mmm ,mmm指向1的名称空间
#导用这个包，其实使用就是__init__.py里面的功能。
#============================================
#导入包的作用：便于使用者使用，以及设计者的维护
#便于使用，是因为在维护升级模块难免会加上许多其他新的功能，
#为了使设计及好维护谜一般会把有关系的功能分开放在多个py文件,
#这样使用者调用包的时候就特别麻烦，这时候采用包的方式，把多个py文件
#放在一个包下面，在用__init__这个Py文件导入，多个py文件的功能
#这样使用者调用时，就只用调用这个包的名字及其其他功能。
#============================================
#绝对导入，以包的文件夹作为起始来进行导入
# 在_init__下写入导用这个包的其他Py文件
# import sys
# print( '==========>这是在被导入的_ in;
# print(sys. path)
# from foo.m1 import f1
# from foo.m2 import f2
# from foo.m3 import f3
#这样就可以只运行_init_就可以调用整个包的功能。
#主要给写模块的人设计的
#============================================
# from foo.qwq.a import x#.的左边的都必须为包
# 绝对导入：以顶级包为起始
# #pool下的__init__.py
# from pool import versions
# 相对导入：.代表当前文件所在的目录，..代表当前目录的上一级目录，依此类推
#只能在包内用
# #pool下的__init__.py
# from . import versions
#from qwq import *可以拿到所有
#============================================

